/* 
> 动机：
1. 适用场景：只被计算一次且之后不再被修改的变量。

> 做法：
    1. 检查变量在使用前是否已经计算完毕，检查计算它的那段代码是否每次都能得到一样的值；
    2. 如果变量目前不是只读的，但是可以改造成只读变量，那就先改造它；
    3. 测试；
    4. 将为变量赋值的代码提炼成函数；
    5. 测试；
    6. 应用【内联变量】手法移除临时变量。
*/

class Order{
    constructor(quantity,item){
        this._quantity = quantity;
        this._item = item;
    }

    getPrice(){
        var basePrice = this._quantity * this._item;
        var discountFactor = 0.99;
        if(basePrice > 1000){
            discountFactor -= 0.03;
        }
        return basePrice * discountFactor;
    }
}
/***************************************************** */

class Orderr{
    constructor(quantity,item){
        this._quantity = quantity;
        this._item = item;
    }

    getPrice(){
        const discountFactor = this.discountFactor();
        return this.basePrice() * discountFactor;
    }
    
    basePrice(){
        return this._quantity * this._item;
    }
    discountFactor(){
        var discountFactor = 0.99;
        if(this.basePrice() > 1000){
            discountFactor -= 0.03;
        }
        return discountFactor;
    }
}

console.log(new Order(10,78).getPrice());
console.log('***************************');
console.log(new Orderr(10,78).getPrice());